package city.spring.modules.medicalstation.drugdepositDrugExt.repository;

import city.spring.modules.medicalstation.drugdepositDrugExt.entity.DrugdepositDrugExtEntity;
import city.spring.modules.medicalstation.drugdepositDrugExt.vo.DrugdepositDrugExtVO;
import city.spring.modules.medicalstation.drugdepositDrugExt.vo.DrugdepositDrugVO;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 存储库：药品缴存与药品关联表
 *
 * @author 谢金婷
 * @date 2020-10-13 16:56:39
 */
@Repository
public interface DrugdepositDrugExtRepository extends BaseMapper<DrugdepositDrugExtEntity> {
    /**
     * 获取缴存的药品列表
     *
     * @param wrapper 查询对象
     * @return
     */
    List<DrugdepositDrugVO> getDrugs(@Param(Constants.WRAPPER) Wrapper<? extends DrugdepositDrugExtEntity> wrapper);

    /**
     * 获取出库的药品列表
     *
     * @param drugdepositId 缴存ID
     * @return
     */
    List<DrugdepositDrugVO> getDepositDrugs(String drugdepositId);

    /**
     * 获取出库的某个药品
     *
     * @param drugdepositId 缴存ID
     * @param extId         主键ID
     * @return
     */
    DrugdepositDrugVO getDepositDrug(String drugdepositId, String extId);

    /**
     * 获取出库的药品列表
     *
     * @param drugdepositId 缴存ID
     * @return
     */
    List<DrugdepositDrugExtEntity> getDepositDds(String drugdepositId);

    void refundDeposit(String id, DrugdepositDrugExtEntity entity);

    /**
     * 跟据老人id查找关联的已进行用药设置的药品信息
     *
     * @param oldmanId
     * @return
     */
    List<DrugdepositDrugExtVO> getDrugdepositDrugByOldmanId(String oldmanId);

    /**
     * 获取缴存的药品列表
     *
     * @param wrapper 查询对象
     * @return
     */
    List<DrugdepositDrugVO> getDrugsettings(@Param(Constants.WRAPPER) Wrapper<? extends DrugdepositDrugExtEntity> wrapper);

    /**
     * 获取出库的药品列表
     *
     * @param drugsettingsId 缴存ID
     * @return
     */
    List<DrugdepositDrugVO> getDrugsettingsDrugs(String drugsettingsId);

    /**
     * 获取出库的某个药品
     *
     * @param drugsettingsId 缴存ID
     * @param extId          主键ID
     * @return
     */
    DrugdepositDrugExtEntity getDrugsettingsDrug(String drugsettingsId, String extId);

    /**
     * 用药设置时，查找已经该老人已经缴存并且未进行用药设置的药品
     *
     * @param oldmanId
     * @return
     */
    List<DrugdepositDrugExtVO> getByOldmanId(String oldmanId);

    IPage<DrugdepositDrugExtVO> listPage(Page<? extends DrugdepositDrugExtEntity> page, @Param(Constants.WRAPPER) Wrapper<? extends DrugdepositDrugExtEntity> wrapper);
}